/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.dominio.Cliente;
import model.dominio.Locacao;
import utilitario.ManipularArquivo;
import utilitario.ValidaException;

/**
 *
 * @author Rodrigo
 */
public class DaoLocacao {

    public static boolean registrarLocacao(Locacao locacao) {
        try {
            ManipularArquivo.salvarNoArquivo(locacao);
            return true;
        } catch (ValidaException ex) {
            System.out.println(ex.getMessage());
            return false;
        }
    }

    public static boolean atualizarLocacao(Locacao locacao) {
        try {
            ManipularArquivo.alterarNoArquivo(locacao, locacao.getCodigo());
            return true;
        } catch (ValidaException ex) {
            System.out.println(ex.getMessage());
            return false;
        }
    }

    public static ArrayList<Locacao> buscarLocacoesFinalizadas() {
        try {
            Locacao l;
            ArrayList<Locacao> lista = new ArrayList<Locacao>();
            ArrayList<String> s = ManipularArquivo.buscarVariosNoArquivo(Locacao.class.getName());
            for (int i = 0; i < s.size(); i++) {
                l = Locacao.stringToObject(s.get(i));
                if (l.getKmEntrada() != null && l.getDataDevolucao() != null) {
                    lista.add(l);
                }
            }
            return lista;
        } catch (ValidaException ex) {
            Logger.getLogger(DaoLocacao.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }

    public static ArrayList<Locacao> buscarLocacoesFinalizadas(Date dataInicial, Date dataFinal) {
        try {
            Locacao l;
            ArrayList<Locacao> lista = new ArrayList<Locacao>();
            ArrayList<String> s = ManipularArquivo.buscarVariosNoArquivo(Locacao.class.getName());
            for (int i = 0; i < s.size(); i++) {
                l = Locacao.stringToObject(s.get(i));
                if (l.getKmEntrada() != null && l.getDataDevolucao() != null) {
                    if ((dataInicial.before(l.getDataSaida()) || dataInicial.equals(l.getDataSaida())) && (dataFinal.after(l.getDataDevolucao()) || dataFinal.equals(l.getDataDevolucao()))) {
                        lista.add(l);
                    }
                }
            }
            return lista;
        } catch (ValidaException ex) {
            System.out.println();
            return null;
        }
    }

    public static ArrayList<Locacao> buscarLocacoesAbertas() {
        try {
            Locacao l;
            ArrayList<Locacao> lista = new ArrayList<Locacao>();
            ArrayList<String> s = ManipularArquivo.buscarVariosNoArquivo(Locacao.class.getName(), "dataDevolucao", "null");
            for (int i = 0; i < s.size(); i++) {
                l = Locacao.stringToObject(s.get(i));
                lista.add(l);
            }
            return lista;
        } catch (ValidaException ex) {
            return null;
        }
    }

    public static ArrayList<Locacao> buscarLocacoesAbertas(Cliente cliente) {
        try {
            Locacao l;
            ArrayList<Locacao> lista = new ArrayList<Locacao>();
            ArrayList<String> s = ManipularArquivo.buscarVariosNoArquivo(Locacao.class.getName(), "cliente", cliente.getCodigo() + "");
            for (int i = 0; i < s.size(); i++) {
                l = Locacao.stringToObject(s.get(i));
                if (l.getKmEntrada() == null && l.getDataDevolucao() == null) {
                    lista.add(l);
                }
            }
            return lista;
        } catch (ValidaException ex) {
            return null;
        }
    }
     public static ArrayList<Locacao> buscarLocacoesAbertas(Date dataInicial, Date dataFinal) {
        try {
            Locacao l;
            ArrayList<Locacao> lista = new ArrayList<Locacao>();
            ArrayList<String> s = ManipularArquivo.buscarVariosNoArquivo(Locacao.class.getName());
            for (int i = 0; i < s.size(); i++) {
                l = Locacao.stringToObject(s.get(i));
                if (l.getKmEntrada() == null && l.getDataDevolucao() == null) {
                    if ((dataInicial.before(l.getDataSaida()) || dataInicial.equals(l.getDataSaida())) && (dataFinal.after(l.getDataDevolucao()) || dataFinal.equals(l.getDataDevolucao()))) {
                        lista.add(l);
                    }
                }
            }
            return lista;
        } catch (ValidaException ex) {
            return null;
        }
    }

    public static ArrayList<Locacao> buscarLocacoes(String campo, String valor) {
        try {
            Locacao l;
            ArrayList<Locacao> lista = new ArrayList<Locacao>();
            ArrayList<String> s = ManipularArquivo.buscarVariosNoArquivo(Locacao.class.getName(), campo, valor);
            for (int i = 0; i < s.size(); i++) {
                l = Locacao.stringToObject(s.get(i));
                lista.add(l);
            }
            return lista;
        } catch (ValidaException ex) {
            return null;
        }
    }
}
